package com.tfblog.blog.controller;


import com.tfblog.blog.entity.Blog;
import com.tfblog.blog.entity.Tag;
import com.tfblog.blog.entity.Type;
import com.tfblog.blog.service.BlogService;
import com.tfblog.blog.service.TagService;
import com.tfblog.exception.CodeException;
import com.tfblog.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author tfeng
 * @since 2021-04-26
 */
@CrossOrigin
@RestController
@RequestMapping("/tag")
public class TagController {

    @Autowired
    private TagService tagService;

    @Autowired
    private BlogService blogService;


    /*
     * 获取所有的分类信息
     * */
    @GetMapping("/list")
    public R findTypes() {
        List<Tag> tagsList = tagService.findTags();
        return R.ok().put("data",tagsList);
    }

    /*
    * 保存标签信息 : 携带标签的名字
    * */
    @Transactional
    @PostMapping("/save")
    public R saveTag(@RequestParam String name) {
        Tag tagBase = tagService.findTagByName(name);
        if (tagBase == null) {
            //此时表示标签不存在,可以进行标签的保存工作
            Tag tag = new Tag();
            tag.setName(name);
            tagService.save(tag);
            return R.ok().putStatus("添加标签成功",200);
        }else {
            return R.ok().putStatus(CodeException.Duplicate_Tag.getMsg(),CodeException.Duplicate_Tag.getStatus());
        }
    }

    /*
    * 删除指定id的标签信息
    * */
    @PostMapping("/delete")
    public R deleteTag(@RequestParam Long id) {
        Tag tag = tagService.findTagById(id);
        if (tag == null) {
            //说明删除的标签不存在
            return R.ok().putStatus(CodeException.NOTEXISTED_Tag.getMsg(),CodeException.NOTEXISTED_Tag.getStatus());
        }else {
            //存在该标签,如果没有对应挂载的博客,我们可以进行删除,否则我们不能删除
            List<Blog> tags = blogService.selectBlogsByTagId(id);
            if (tags.size() == 0) {
                tagService.deleteById(id);
                return R.ok().putStatus("标签删除成功",200);
            }else {
                return R.ok().putStatus(CodeException.EXISTED_BLOG_Tag.getMsg(),CodeException.EXISTED_BLOG_Tag.getStatus());
            }

        }
    }

    /*
    * 修改标签信息
    * */
    @Transactional
    @PostMapping("/update")
    public R updateTag(@RequestBody Tag tag) {
        Tag tagBase = tagService.findTagByName(tag.getName());
        if (tagBase != null) {
            //说明修改以后的标签已经存在
            return R.ok().putStatus(CodeException.Duplicate_Tag.getMsg(),CodeException.Duplicate_Tag.getStatus());
        }
        //否则我们进行标签的修改
        tagService.updateById(tag);
        return R.ok().putStatus("标签信息修改成功",200);
    }

    /*
     * 获取指定标签的博客数量
     * */
    @GetMapping("/blogcount")
    public R findBlogCountByTagId(@RequestParam Long id) {
        int count = blogService.findBlogCountByTagId(id);
        return R.ok().put("count",count);
    }



}

